import 'package:flutter/foundation.dart';
import '../services/database_helper.dart';
import '../models/restaurant.dart';

class RestaurantProvider with ChangeNotifier {
  List<Restaurant> _restaurants = [];
  bool _isLoading = false;

  List<Restaurant> get restaurants => _restaurants;
  bool get isLoading => _isLoading;

  final DatabaseHelper _dbHelper = DatabaseHelper();

  // 加载所有饭店
  Future<void> loadRestaurants() async {
    _isLoading = true;
    notifyListeners();
    
    try {
      final restaurants = await _dbHelper.getRestaurants();
      _restaurants = restaurants;
    } catch (e) {
      print('加载饭店数据失败: $e');
      _restaurants = [];
    } finally {
      _isLoading = false;
      notifyListeners();
    }
  }
    // 检查饭店名称是否重复
  bool _isRestaurantNameDuplicate(String name, {int? excludeId}) {
    return _restaurants.any((restaurant) =>
      restaurant.name.toLowerCase() == name.toLowerCase() &&
      restaurant.id != excludeId);
  }

  // 添加饭店
    Future<bool> addRestaurant(Restaurant restaurant) async {
      try {
        // 检查名称是否重复
        if (_isRestaurantNameDuplicate(restaurant.name)) {
          throw Exception('饭店名称"${restaurant.name}"已存在，请使用其他名称');
        }
        
        await _dbHelper.insertRestaurant(restaurant);
        await loadRestaurants(); // 重新加载列表
        return true;
      } catch (e) {
        print('添加饭店失败: $e');
        rethrow; // 重新抛出异常，让调用方处理
      }
    }

  // 更新饭店
  Future<bool> updateRestaurant(Restaurant restaurant) async {
    try {
      // 检查名称是否重复（排除自身）
      if (_isRestaurantNameDuplicate(restaurant.name, excludeId: restaurant.id)) {
        throw Exception('饭店名称"${restaurant.name}"已存在，请使用其他名称');
      }
      
      await _dbHelper.updateRestaurant(restaurant);
      await loadRestaurants(); // 重新加载列表
      return true;
    } catch (e) {
      print('更新饭店失败: $e');
      rethrow;
    }
  }

  // 删除饭店
  Future<bool> deleteRestaurant(int id) async {
    try {
      await _dbHelper.deleteRestaurant(id);
      await loadRestaurants(); // 重新加载列表
      return true;
    } catch (e) {
      print('删除饭店失败: $e');
      return false;
    }
  }
}